#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <stdint.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdbool.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <dlfcn.h>
#include <pthread.h>
#include <linux/fb.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <syslog.h>
#include <pthread.h>
#include <semaphore.h>
sem_t *sem;
void fun(int sig)
{
    sem_close(sem);
    sem_unlink("data");
}
int main(int argc, char const *argv[])
{
    signal(SIGINT,fun);
    key_t key =ftok(".",1);
    int shmid =shmget(key,128,IPC_CREAT|0666);
    char *p=shmat(shmid,NULL,0);
    if(p==(void*)-1)
    {
        perror("shmat失败");
        exit(0);
    }

    sem=sem_open("data",O_CREAT|O_EXCL|O_RDWR,0666,0);
    if(sem==SEM_FAILED&&errno==EEXIST)
    {
        sem=sem_open("data",O_RDWR);
    }
    else if(sem==SEM_FAILED)
    {
        perror("sem_open() 失败");
        exit(0);
    }
    while(1)
    {
        if(sem_wait(sem)==-1)
        {
            break;
        }
        printf("%s",p);
        
    }

    return 0;
}